//package com.gj.client;
//
//
//import cn.hutool.core.collection.CollectionUtil;
//import cn.hutool.json.JSONUtil;
//import com.alibaba.fastjson.JSON;
//import com.iotwisp.video.entity.Gyro;
//import com.iotwisp.video.entity.GyroSettingDTO;
//import com.iotwisp.video.response.GyroResponse;
//import com.iotwisp.video.service.IGyroService;
//import com.iotwisp.video.utils.IotwispConfig;
//import com.iotwisp.video.utils.RedisUtils;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Async;
//import org.springframework.stereotype.Component;
//
//import java.io.*;
//import java.net.InetAddress;
//import java.net.ServerSocket;
//import java.net.Socket;
//import java.util.*;
//
//@Slf4j
//@Component
//@RequiredArgsConstructor
//public class SocketHander {
//
//    public static Map<Integer, Socket> socketMap = new HashMap<>();
//    private final RedisUtils redisUtils;
//    @Autowired
//    private IGyroService gyroService;
//    @Autowired
//    private IotwispConfig config;
//
//    @Async
//    public void handle(Socket socket) {
//
//        BufferedReader in;
//        try {
//            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//
//            int ch;
//            boolean flag = false;
//            List<Integer> messageList = new ArrayList<>();
//
//            while (true) {
//
//                InetAddress inetAddress = socket.getInetAddress();
//                String hostAddress = inetAddress.getHostAddress();
//
//                log.info(" ’µΩ–¬¡¨Ω”:" + socket.getInetAddress().getHostAddress());
//
//                if ((ch = in.read()) != -1) {
//                    if (ch == 65533) {
//                        if (flag) {
//
//                            log.info("messageList====={}", JSON.toJSONString(messageList));
//                            if (CollectionUtil.isNotEmpty(messageList) && messageList.size() >= 5) {
//                                // ±®Œ≤
//                                Integer message1 = messageList.get(0);
//                                Integer message2 = messageList.get(1);
//                                Integer message3 = messageList.get(2);
//                                Integer message4 = messageList.get(3);  //  –ƒÃ¯±Í ∂
//                                Integer message5 = messageList.get(4);  //  …Ë±∏id
//
//                                log.info("Current Messages: {} # {} # {} # {} # {}", message1, message2, message3, message4, message5);
//                                socketMap.put(message5, socket);
//
//                                log.info("from {} socket to {}", hostAddress, message5);
//                                // Ω‚Œˆ±®Œƒ
//                                String message = parseMessage(message1, message2, message3);
//                                log.info("Current Angle is : {}", message);
//
//                                log.info("GyroSocket gyroSocketMap : {}", GyroSocket.gyroSocketMap);
//                                List<GyroSocket> gyroSocketList = GyroSocket.gyroSocketMap.get(Long.valueOf(message5));
//
//                                if (CollectionUtil.isNotEmpty(gyroSocketList)) {
//                                    for (GyroSocket gyroSocket : gyroSocketList) {
//                                        try {
//                                            redisUtils.set(String.valueOf(message5), message);
//                                            gyroSocket.session.getBasicRemote().sendText(message + "");
//                                        } catch (Exception e) {
//                                            e.printStackTrace();
//                                        }
//                                    }
//                                }
//
//                                messageList.clear();
//
//                                //  ºÏ≤È «∑Ò”–±ÿ“™∏¸–¬IPº∞÷ÿ∆Ù…Ë±∏
//                                if (config.getAutoSettingGyro()) {
//                                    checkSetting(socket, message5);
//                                }
//
//                            } else {
//                                log.info(" ’µΩŒ¥÷™ ˝æ› {}", JSON.toJSONString(messageList));
//                            }
//                        }
//                        flag = !flag;
//                    } else {
//                        if (flag) {
//                            messageList.add(ch);
//                        }
//                    }
//                }
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    private void checkSetting(Socket socket, Integer gyroId) throws IOException {
//        Gyro gyro = gyroService.getById(Long.valueOf(gyroId));
//        GyroSettingDTO setting = JSONUtil.toBean(gyro.getSettings(), GyroSettingDTO.class);
//
//        if (StringUtils.isNotBlank(gyro.getSettings())) {
//            //  »Áπ˚…Ë±∏±Ì¿Ôµƒ…Ë÷√≤ªŒ™ø’£¨æÕ∏¯…Ë±∏∏¸–¬IP
//            settingIp(socket, setting);
//            //  …Ë÷√ÕÍ“™÷ÿ∆Ù…Ë±∏
//            gyroService.restart(gyroId);
//        }
//
//        log.info("…Ë±∏{}µƒip…Ë÷√Œ™{}", gyroId, JSONUtil.toJsonPrettyStr(setting));
//
//        gyro.setSettings(null);
//        gyroService.updateById(gyro);
//    }
//
//    private void settingIp(Socket socket, GyroSettingDTO setting) throws IOException {
//
////        System.out.println("«Î ‰»Î∑˛ŒÒ∆˜IP£∫");
////        Scanner s = new Scanner(System.in);
////        String ip1 = s.next();
//        String ip1 = setting.getServerIp();
//
////        System.out.println("«Î ‰»ÎÕ¯πÿIP£∫");
////        Scanner s2 = new Scanner(System.in);
////        String ip2 = s2.next();
//
//        String ip2 = setting.getGatewayIp();
//
////        System.out.println("«Î ‰»Î◊”Õ¯—⁄¬Î£∫");
////        Scanner s3 = new Scanner(System.in);
////        String ip3 = s3.next();
//
//        String ip3 = setting.getMask();
//
////        System.out.println("«Î ‰»Î…Ë±∏IP…Ë÷√÷µ£∫");
////        Scanner s4 = new Scanner(System.in);
////        String ip4 = s4.next();
//
//        String ip4 = setting.getDeviceIp();
//
//        //InetAddress addr = InetAddress.getByName("192.168.4.221");
//        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//        PrintWriter out = new PrintWriter(socket.getOutputStream());
//        DataOutputStream back = new DataOutputStream(socket.getOutputStream());
//        int ch;
//        //byte[] ip = {(byte)0xaa,(byte)192,(byte)168,(byte)1,(byte)1};
//        back.writeByte((byte) 0x01);
//        back.writeByte((byte) 0xaa);
//        back.writeByte((byte) 0xbb);
//        back.writeByte((byte) Short.parseShort(ip1.split("\\.")[0]));
//        back.writeByte((byte) Short.parseShort(ip1.split("\\.")[1]));
//        back.writeByte((byte) Short.parseShort(ip1.split("\\.")[2]));
//        back.writeByte((byte) Short.parseShort(ip1.split("\\.")[3]));
//        back.writeByte((byte) 0xaa);
//        back.writeByte((byte) 0xcc);
//        back.writeByte((byte) Short.parseShort(ip2.split("\\.")[0]));
//        back.writeByte((byte) Short.parseShort(ip2.split("\\.")[1]));
//        back.writeByte((byte) Short.parseShort(ip2.split("\\.")[2]));
//        back.writeByte((byte) Short.parseShort(ip2.split("\\.")[3]));
//        back.writeByte((byte) 0xaa);
//        back.writeByte((byte) 0xdd);
//        back.writeByte((byte) Short.parseShort(ip3.split("\\.")[0]));
//        back.writeByte((byte) Short.parseShort(ip3.split("\\.")[1]));
//        back.writeByte((byte) Short.parseShort(ip3.split("\\.")[2]));
//        back.writeByte((byte) Short.parseShort(ip3.split("\\.")[3]));
//        back.writeByte((byte) 0xaa);
//        back.writeByte((byte) 0xee);
//        back.writeByte((byte) Short.parseShort(ip4.split("\\.")[0]));
//        back.writeByte((byte) Short.parseShort(ip4.split("\\.")[1]));
//        back.writeByte((byte) Short.parseShort(ip4.split("\\.")[2]));
//        back.writeByte((byte) Short.parseShort(ip4.split("\\.")[3]));
//        back.flush();
//        while (true) {
//            String sen;
//            if ((ch = in.read()) != -1) {
//                sen = intTohex(ch);
//                System.out.println(String.valueOf(ch));
//                if (ch == 65533) {
//                    System.out.println("hree");
//                    //client.close();
//                    //client = server.accept();
//                    //in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//                }
//            }
//        }
//    }
//
//    public static String intTohex(int n) {
//        StringBuffer s = new StringBuffer();
//        String a;
//        char[] b = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
//        while (n != 0) {
//            s = s.append(b[n % 16]);
//            n = n / 16;
//        }
//        a = s.reverse().toString();
//        if ("".equals(a)) {
//            a = "00";
//        }
//        if (a.length() == 1) {
//            a = "0" + a;
//        }
//        return a;
//    }
//
//    private String parseMessage(Integer message1, Integer message2, Integer message3) {
//
//        int angle;
//        if (message1 == 1) {
//            if (message2 > 0) {
//                angle = 360 - 90 - message3;
//            } else {
//                angle = 360 - message3;
//            }
//        } else {
//            if (message2 > 0) {
//                angle = 90 + message3;
//            } else {
//                angle = message3;
//            }
//        }
//
//        return String.valueOf(360 - angle);
//    }
//
//}
//
